package com.stellar.circle.basic.service;

import com.stellar.circle.basic.entity.SPostTag;
import com.stellar.circle.controller.admin.sPostTag.vo.HotTopicVO;
import com.stellar.circle.controller.admin.sPostTag.vo.PostTagOverviewVO;
import com.stellar.circle.controller.admin.sPostTag.vo.UsageTrend;

import java.util.List;
import java.util.Map;

/**
 * 话题表(SPostTag)服务接口
 *
 * @author Jqchan
 * @since 2025-05-17 19:30:33
 */
public interface SPostTagService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    SPostTag queryById(Long id);

    /**
     * 条件查询单条结果
     *
     * @param condition 查询条件
     * @return 实例对象
     */
    SPostTag queryByCondition(SPostTag condition);

    /**
     * 条件查询全部结果
     *
     * @param condition 查询条件
     * @return 实例对象列表
     */
    List<SPostTag> queryAllByCondition(SPostTag condition);

    /**
     * 分页查询
     *
     * @param condition 查询条件
     * @param page      页码
     * @param pageSize  每页数量
     * @return 分页结果
     */
    List<SPostTag> page(SPostTag condition, int page, int pageSize);

    /**
     * 新增数据
     *
     * @param entity 实例对象
     * @return 影响行数
     */
    int insert(SPostTag entity);

    /**
     * 修改数据
     *
     * @param entity 实例对象
     * @return 影响行数
     */
    int update(SPostTag entity);

    /**
     * 通过主键删除
     *
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 条件统计
     *
     * @param condition 统计条件
     * @return 总数
     */
    Long count(SPostTag condition);

    /**
     * 处理话题
     *
     * @param postTag
     * @return
     */
    Long callUpsertPostTag(String postTag);

    /**
     * 通过ID批量查询
     *
     * @param tagIds
     * @return
     */
    List<SPostTag> queryByIds(List<Long> tagIds);

    /**
     * 获取或创建标签
     *
     * @param tagName
     * @return
     */
    Long getOrCreateTag(String tagName);

    /**
     * 获取标签统计信息
     *
     * @return
     */
    PostTagOverviewVO selectTagStats();

    /**
     * 获取话题类型分布
     *
     * @return
     */
    PostTagOverviewVO selectTypeDistribution();

    /**
     * 获取使用趋势
     *
     * @return
     */
    List<UsageTrend> selectRecentUsageTrend();

    /**
     * 获取热门话题
     *
     * @return
     */
    List<HotTopicVO> selectHotTopics();
}
